C#变量初始化问题:字段初始值无法引用非静态字段、方法或属性

问题:字段初始值设定项无法引用非静态字段、方法或属性的问题

下面代码出错的原因,在类中定义的字段为什么不能用?
(1)

public string text = test(); //提示 字段或属性的问题字段初始值设定项无法引用非静态字段、方法
    protected void Page_Load(object sender, EventArgs e)
    { 
    }

    public string test()
    { return ""; }
}

(2)

 public class modbusThreadClass
  {
  SerialPort sp = new SerialPort();
        PlcControl plc = new PlcControl(sp,Dev_IP_param.comPort, Dev_IP_param.plcBaudRate);
        Collector_8961F2_Control collctor_8961F2 = new Collector_8961F2_Control(sp,Dev_IP_param.comPort, Dev_IP_param.collectorBaudRate);

        public modbusThreadClass()
        {
        }
}

C#规定在类内部只能定义属性或者变量,并初始化,不能直接变量引用变量。

在初始化类实例之前就调用了字段

c# 中字段的初始化先于构造函数。

string y = “asdf” + x; 实际上是 y = “asdf” + this.x;

因为这时this还没被初始化,所以编译会报错。

属性内存和变量内存的分配的时间不一样。
属性是用的时候分配,变量是在类初始化时候分配。

二、可以使用一下两种方法修改:
(1)可以通过属性方式调用:

public string text = test(); //提示 字段或属性的问题字段初始值设定项无法引用非静态字段、方法
    protected void Page_Load(object sender, EventArgs e)
    { 
    }

    public string test()
    { return ""; }

(2)使用 static 修饰符声明属于类型本身而不是属于特定对象的静态成员static修饰符可用于类、字段、方法、属性、运算符、事件和构造函数,但不能用于索引器、析构函数或类以外的类型

static SerialPort sp = new SerialPort();
        PlcControl plc = new PlcControl(sp,Dev_IP_param.comPort, Dev_IP_param.plcBaudRate);
        Collector_8961F2_Control collctor_8961F2 = new Collector_8961F2_Control(sp,Dev_IP_param.comPort, Dev_IP_param.collectorBaudRate);

静态全局变量

定义:在全局变量前,加上关键字 static 该变量就被定义成为了一个静态全局变量。

特点:
  A、该变量在全局数据区分配内存。
  B、初始化:如果不显式初始化,那么将被隐式初始化为0。

静态局部变量

定义:在局部变量前加上static关键字时,就定义了静态局部变量。

特点:
  A、该变量在全局数据区分配内存。
  B、初始化:如果不显式初始化,那么将被隐式初始化为0。
  C、它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或 语句块结束时,其作用域随之结束。

静态数据成员
特点:
  A、内存分配:在程序的全局数据区分配。
  B、初始化和定义:
    a、静态数据成员定义时要分配空间,所以不能在类声明中定义。
    b、为了避免在多个使用该类的源文件中,对其重复定义,所在,不能在类的头文件中
    定义。
    c、静态数据成员因为程序一开始运行就必需存在,所以其初始化的最佳位置在类的内部实现。
  C、特点
    a、对相于 public,protected,private 关键字的影响它和普通数据成员一样,
    b、因为其空间在全局数据区分配,属于所有本类的对象共享,所以,它不属于特定的类对象,在没产生类对象时其作用域就可见,即在没有产生类的实例时,我们就可以操作它。
   
 D、访问形式
    a、 类对象名.静态数据成员名
   
 E、静态数据成员,主要用在类的所有实例都拥有的属性上。比如,对于一个存款类,帐号相对   于每个实例都是不同的,但每个实例的利息是相同的。所以,应该把利息设为存款类的静态数据成员。这有两个好处,第一,不管定义多少个存款类对象,利息数据成员都共享分配在全局区的内存,所以节省存贮空间。第二,一旦利息需要改变时,只要改变一次,则所有存款类对象的利息全改变过来了,因为它们实际上是共用一个东西。

静态成员函数
特点:
  A、静态成员函数与类相联系,不与类的对象相联系。
  B、静态成员函数不能访问非静态数据成员。原因很简单,非静态数据成员属于特定的类实例。
作用:
  主要用于对静态数据成员的操作。

调用形式:
  A、类对象名.静态成员函数名()

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
封面 1 书名 2 版权 3 前言 8 目录 10 第一部份:Visual Basic 2010 环境 18 第一章 全身心投入:Visual Basic 2010 编程之旅 19 1.1 开始使用Visual Basic 2010 20 1.2 新建项目 20 1.3 理解 Visual Studio 2010 22 1.4 修改对象的属性 23 1.4.1 对象的命名 23 1.4.2 设置窗体的Text属性 24 1.4.3 保存项目 25 1.4.4 为窗体添加图标 25 1.4.5 改变窗体的大小 26 1.5 在窗体中添加控件 27 1.6 设计界面 27 1.6.1 在窗体中添加可见控件 28 1.6.2 在窗体中添加不可见控件 29 1.7 编写界面后面的代码 30 1.7.1 让用户浏览文件 30 1.7.2 使用代码终止程序 32 1.8 运行项目 33 1.9 总结 34 1.10 问与答 34 1.11 作业 35 1.11.1 测验 35 1.11.2 答案 35 1.11.3 练习 35 第二章 Visual Basic 2010导航 36 2.1 使用Visual Basic 2010起始页 36 2.1.1 创建新项目 37 2.1.2 打开现有项目 38 2.2 导航和定制Visual Basic环境 38 1. 显示和隐藏设计窗口 39 2. 浮动设计窗口 39 3. 停靠设计窗口 40 4. 自动隐藏设计窗口 41 2.3 使用工具栏 41 2.3.1 显示和隐藏工具栏 42 2.3.2 停靠工具栏及调整其大小 42 2.4 使用工具箱将控件添加到窗体 43 2.5 使用“属性”窗口设置对象属性 44 2.5.1 选择对象并查看其属性 44 2.5.2 查看和修改属性 44 2.5.3 使用颜色属性 45 2.5.4 查看属性说明 47 2.6 管理项目 47 2.6.1 使用“解决方案资源管理器”管理项目文件 47 2.6.2 使用解决方案 48 2.6.3 理解项目组件 49 2.6.4 设置项目属性 50 2.6.5 添加和删除项目文件 50 2.7 快速而简单的编程入门指南 51 2.7.1 用变量存储值 51 2.7.2 使用过程来编写代码功能单元 52 2.8 获取帮助 52 2.9 总结 53 2.10 问与答 53 2.11 作业 54 2.11.1 测验 54 2.11.2 答案 54 2.11.3 练习 54 第三章 理解对象和集合 55 3.1 理解对象 56 3.2 理解属性 56 3.2.1 获取和设置属性 57 3.2.2 使用对象及其属性 58 3.3 理解方法 61 3.3.1 触发方法 61 3.3.2 理解方法的动态性 61 3.4 创建简单的对象示例项目 62 3.4.1 为绘图项目创建界面 62 3.4.2 编写基于对象的代码 62 3.4.3 测试对象示例项目 65 3.5 理解集合 65 3.6 使用对象浏览器 67 3.7 总结 68 3.8 问与答 68 3.9 作业 69 3.9.1 测试 69 3.9.2 答案 69 3.9.3 练习 69 第四章 理解事件 70 4.1 理解事件驱动的编程 70 4.1.1 触发事件 71 4.1.2 避免递归事件 72 4.1.3 访问对象的事件 73 4.1.4 使用事件参数 74 4.2 创建事件示例项目 76 4.2.1 创建用户界面 76 4.2.2 创建事件处理程序 77 4.3 更新事件名 79 4.4 总结 79 4.5 问与答 80 4.6 作业 80 4.6.1 测试 80 4.6.2 答案 80 4.6.3 练习 81 第二部份 创建用户界面 82 第五章 创建窗体:基础知识 83 5.1 修改窗体的名称 84 5.2 改变窗体的外观 85 5.2.1 在窗体的标题栏中显示文本 85 5.2.2 改变窗体的背景色 86 5.2.3 将图像添加到窗体背景中 87 5.2.4 为窗体添加图标 88 5.2.5 为窗体添加最小化、最大化和控制框按钮 89 5.2.6 修改窗体边框的外观和行为 90 5.2.7 控制窗体最小化和最大化时的大小 91 5.3 显示和隐藏窗体 92 5.3.1 显示窗体 92 5.3.2 理解窗体的模态性 92 5.3.3 以正常、最大化或最小化状态显示窗体 93 5.3.4 指定窗体的初始显示位置 94 5.3.5 防止窗体在任务栏中出现 95 5.3.6 卸载窗体 95 5.4 总结 96 5.5 问与答 96 5.6 作业 96 5.6.1 测验 96 5.6.2 答案 97 5.6.3 练习 97 第六章 创建窗体:高级技能 98 6.1 使用控件 98 6.1.1 将控件添加到窗体中 98 6.1.2 操纵控件 99 6.1.3 创建Tab顺序 107 6.1.4 堆叠控件 109 6.2 创建位于最前面的模态窗口 109 6.3 创建透明窗体 109 6.4 创建可滚动窗体 110 6.5 创建多文档界面 111 6.6 设置启动窗体 113 6.7 总结 114 6.8 问与答 114 6.9 作业 114 6.9.1 测验 114 6.9.2 答案 115 6.9.3 练习 115 第七章 使用传统控件 116 7.1 使用Lable控件显示静态文本 116 7.2 通过文本框让用户输入文本 117 7.2.1 指定文本对齐方式 118 7.2.2 创建多行文本框 118 7.2.3 添加滚动条 119 7.2.4 限制用户可输入的字符数 120 7.2.5 创建密码框 120 7.2.6 理解文本框的常用事件 121 7.3 创建按钮 121 7.3.1 接受按钮和取消按钮 122 7.3.2 使用复选框提供是/否选项 123 7.4 创建容器和单选按钮组 124 7.4.1 使用面板和分组框 124 7.4.2 使用单选按钮 125 7.5 使用列表框显示列表 126 7.5.1 在设计时操纵Items 127 7.5.2 在运行时操纵Items 127 7.5.3 对列表进行排序 131 7.6 使用组合框创建下?131 7.7 总结 132 7.8 问与答 133 7.9 作业 133 7.9.1 测验 133 7.9.2 答案 134 7.9.3 练习 134 第八章 使用高级控件 135 8.1 创建定时器 135 8.2 创建带选项卡的对话框 137 8.3 在图像列表(Image List)控件中存储图片 140 8.4 使用列表视图(List View)控件创建增强的列表 141 8.4.1 创建列 141 8.4.2 添加列表项 142 8.4.3 使用代码操纵List View 143 8.5 使用Tree View创建层次列表 144 8.5.1 在Tree View中添加节点 145 8.5.2 删除节点 146 8.5.3 清除所有节点 147 8.6 总结 147 8.7 问与答 147 8.8 作业 148 8.8.1 测验 148 8.8.2 答案 148 8.8.3 练习 148 第九章 给窗体添加菜单和工具栏 149 9.1 创建菜单 149 9.1.1 创建顶级菜单项 150 9.1.2 为顶级菜单创建菜单项 152 9.1.3 移动和删除菜单项 153 9.1.4 创建复选菜单项 153 9.1.5 对菜单进行编程 154 9.1.6 实现上下文菜单 156 9.1.7 为菜单项指定快捷键 157 9.2 使用Toolbar(工具栏)控件 158 9.2.1 使用按钮集合添加工具栏按钮 159 9.2.2 对工具栏进行编程 161 9.2.3 为工具栏按钮创建下?161 9.3 创建状态栏 162 9.4 总结 163 9.5 问与答 163 9.6 作业 163 9.6.1 测验 163 9.6.2 答案 164 9.6.3 练习 164 第三部份 编程 166 第十章 创建和调用过程 167 10.1 创建Visual Basic代码模块 167 10.2 编写过程 169 10.2.1 声明不返回值的过程 169 10.2.2 声明返回值的过程 172 10.3 调用过程 173 10.4 退出过程 177 10.5 避免无限递归 177 10.6 总结 178 10.7 问与答 179 10.8 作业 179 10.8.1 测验 179 10.8.2 答案 179 10.8.3 练习 180 第十一章 使用常量、数据类型、变量和数组 181 11.1 理解数据类型 182 11.1.1 确定数据类型 182 11.1.2 将数据从一种类型转换为另一种数据类型 184 11.2 定义和使用常量 185 11.3 声明和引用变量 186 11.3.1 声明变量 186 11.3.2 将字面值赋给变量 187 11.3.3 在表达式中使用变量 188 11.3.4 强制变量声明和数据类型检查 188 11.3.5 显式变量声明 188 11.3.6 严格类型检查 189 11.4 使用数组 191 11.4.1 声明数组 191 11.4.2 引用数组变量 191 11.4.3 创建多维数组 192 11.5 确定作用域 193 11.5.1 理解块作用域 193 11.5.2 理解过程级(局部)作用域 194 11.5.3 理解模块级作用域 194 11.5.4 使用全局(命名空间级)作用域 195 11.5.5 名称冲突 196 11.6 声明静态变量 196 11.7 命名规范 197 11.7.1 使用前缀表示数据类型 197 11.7.2 使用变量前缀表示作用域 198 11.7.3 其他前缀 198 11.8 在Picture Viewer项目中使用变量 198 11.8.1 为选项创建变量 198 11.8.2 初始化和使用选项变量 199 11.9 总结 201 11.10 问与答 202 11.11 作业 202 11.11.1 测验 202 11.11.2 答案 203 11.11.3 练习 203 第十二章 执行算术运算、字符串操作和日期/时间调整 204 12.1 使用Visual Basic执行基本的算术运算 204 12.1.1 执行加法运算 205 12.1.2 执行减法和求负运算 205 12.1.3 执行乘法运算 205 12.1.4 执行除法运算 205 12.1.5 执行乘方运算 206 12.1.6 执行取模算术运算 206 12.1.7 判断运算符优先级顺序 206 12.2 比较 207 12.3 理解布尔逻?208 12.3.1 使用And运算符 209 12.3.2 使用Not运算符(!) 209 12.3.3 使用Or运算符 209 12.3.4 使用Xor运算符 210 12.4 操纵字符串 210 12.4.1 连接字符串 210 12.4.2 使用基本的字符串函数 211 12.5 使用日期和时间 214 12.5.1 理解Date数据类型 214 12.5.2 增加或减少日期或时间 215 12.5.3 确定两个日期或时间之间的间隔 216 12.5.4 获取日期的组成部份 216 12.5.5 格式化日期和时间 217 12.5.6 获取当前的系统日期和时间 217 12.5.7 判断值是否为Date 218 12.6 总结 218 12.7 问与答 218 12.8 作业 219 12.8.1 测验 219 12.8.2 答案 219 12.8.3 练习 219 第十三章 使用Visual Basic代码做出决策 220 13.1 使用If...Then进行决策 220 13.1.1 当表达式为False时执行代码 222 13.1.2 使用ElseIf进行复杂的决策 223 13.1.3 嵌套的If...Else结构 224 13.1.4 在一条Case语句中考虑多个可能的值 225 13.1.5 创建Select Case示例 225 13.1.6 创造性地使用Select Case 227 13.2 在过程中使用GoTo实现分支 228 13.3 总结 230 13.4 问与答 230 13.5 作业 230 13.5.1 测验 230 13.5.2 答案 231 13.5.3 练习 231 第十四章 使用循环提高效率 232 14.1 使用For...Next执行确定次数的循环 232 14.1.1 使用Next语句结束循环 233 14.1.2 使用Step指定每次增加的值 233 14.1.3 提早结束循环 234 14.1.4 到达Next之前进入下一次循环 234 14.1.5 创建For...Next示例 235 14.2 使用Do...Loop执行次数不确定的循环 237 14.2.1 创建Do...Loop 237 14.2.2 终止Do...Loop循环 237 14.2.3 创建Do...Loop示例 238 14.3 总结 240 14.4 问与答 240 14.5 作业 241 14.5.1 测验 241 14.5.2 答案 241 14.5.3 练习 241 第十五章 调试代码 242 15.1 在代码中添加注释 243 15.2 识别两种基本的错误 244 15.3 使用Visual Basic的调试工具 246 15.3.1 使用断点 246 15.3.2 使用“即时”窗口 248 15.4 使用Try...Catch...Finally创建结构化错误处理程序 251 15.4.1 处理异常 253 15.4.2 处理预期的异常 254 15.5 总结 256 15.6 问与答 256 15.7 作业 257 15.7.1 测验 257 15.7.2 答案 257 15.7.3 练习 257 第十六章 使用类设计对象 258 16.1 理解类 259 16.1.1 使用类来封装数据和代码 259 16.1.2 比较类和标准模块 259 16.1.3 创建对象接口 260 16.2 根据类实例化对象 265 16.2.1 将对象引用绑定到变量 265 16.2.2 解除对象引用 269 16.2.3 理解对象的生命周期 269 16.3 总结 270 16.4 问与答 270 16.5 作业 270 16.5.1 测验 270 16.5.2 答案 271 16.5.3 练习 271 第十七章 与用户交互 272 17.1 使用MessageBox.Show()函数显示消息 272 17.1.1 指定按钮和图标 273 17.1.2 判断单击的是哪个按钮 275 17.1.3 创建好的消息 276 17.2 创建自定义对话框 276 17.3 使用InputBox()从用户那里获取信息 279 17.4 用键盘交互 280 17.5 使用常见的鼠标事件 282 17.6 总结 284 17.7 问与答 285 17.8 作业 285 17.8.1 测验 285 17.8.2 答案 285 17.8.3 练习 286 第十八章 使用图形 287 18.1 理解Graphics对象 287 18.1.1 为窗体或控件创建Graphics对象 288 18.1.2 为新位图创建Graphics对象 288 18.2 使用?289 18.3 使用系统颜色 290 18.4 使用矩形 292 18.5 绘制形状 293 18.5.1 绘制线条 293 18.5.2 绘制矩形 293 18.5.3 绘制圆形和椭圆 293 18.5.3 清除绘图表面 294 18.6 绘制文本 294 18.7 持久化窗体上的图形 295 18.8 创建绘图示例项目 295 18.9 总结 299 18.10 问与答 300 18.11 作业 300 18.11.1 测验 300 18.11.2 答案 300 18.11.3 练习 301 第四部份 使用数据 302 第十九章 执行文件操作 303 19.1 使用OpenFileDialog和SaveFileDialog控件 303 19.1.1 使用OpenFileDialog控件 304 19.1.2 使用SaveFileDialog控件 306 19.2 使用File对象对文件进行操作 308 19.2.1 判断文件是否存在 308 19.2.2 复制文件 308 19.2.3 移动文件 309 19.2.4 重命名文件 310 19.2.5 删除文件 310 19.2.6 获取文件属性 311 19.3 使用Directory对象对目录进行操作 314 19.4 总结 315 19.5 问与答 315 19.6 作业 315 19.6.1 测验 315 19.6.2 答案 316 19.6.3 练习 316 第二十章 使用注册表和文本文件 317 20.1 使用注册表 317 20.1.1 理解Windows注册表的结构 318 20.1.2 使用My.Computer.Registry访问注册表 319 20.1.3 修改Picture Viewer项目以使用注册表 322 20.2 读写文本文件 326 20.2.1 写入文本文件 326 20.2.2 读取文本文件 328 20.2.3 修改Picture Viewer项目以使用文本文件 329 20.3 总结 332 20.4 问与答 333 20.5 作业 333 20.5.1 测验 333 20.5.2 答案 333 20.5.3 练习 334 第二十一章 使用数据库 335 21.1 ADO.NET简介 336 21.1.1 连接到数据库 337 21.1.2 关闭到数据源的连接 338 21.2 操作数据 338 21.2.1 理解DataTable 339 21.2.2 创建DataAdapter 339 21.2.3 创建和填充DataTable 340 21.2.4 引用DataRow中的字段 341 21.2.5 导航数据 342 21.2.6 编?344 21.2.7 创建新记录 344 21.2.8 删除记录 346 21.2.9 运行数据库示例 346 21.3 总结 346 21.4 问与答 347 21.5 作业 347 21.5.1 测验 347 21.5.2 答案 347 21.5.3 练习 348 第二十二章 使用自动化控制其他应用程序 349 22.1 自动化Microsoft Excel 350 22.1.1 创建指向自动化库的引用 350 22.1.2 创建自动化服务器实例 351 22.1.3 对服务器进行操作 352 22.2 自动化Microsoft Word 354 22.2.1 创建指向自动化库的引用 355 22.2.2 创建自动化服务器实例 355 22.3 总结 356 22.4 问与答 357 22.5 作业 357 22.5.1 测验 357 22.5.2 答案 357 22.5.3 练习 358 第五部份 部署应用程序及其他 360 第二十三章 部署应用程序 361 23.1 理解ClickOnce技术 361 23.2 使用发布向导来创建ClickOnce程序 362 23.3 测试Picture Viewer的ClickOnce安装程序 364 23.4 卸载已安装的应用程序 365 23.5 为创建ClickOnce程序设置高级选项 366 23.6 总结 367 23.7 问与答 367 23.8 作业 367 23.8.1 测验 367 23.8.2 答案 367 23.8.3 练习 368 第二十四章 广阔的视野 369 24.1 .NET Framework 369 24.2 公共语言运行时 370 24.3 微软中间语言 370 24.4 命名空间 371 24.5 通用类型系统 372 24.6 垃圾回收 372 24.7 进一步的阅读 373 24.8 总结 373 封底 374
CLR.via.C#.(中文第3版)(自制详细书签)Part2 CLR via C#(第3版) Jeffrey Richter 著 周靖 译 出版时间:2010年09月 页数:800 介绍 享有全球盛誉的编程专家Jeffrey Richter,这位与Microsoft .NET开发团队合作长达8年时间的资深顾问,在本书中和读者分享他编程生涯中积累的所有丰富经验和心得,他的独到、睿智的见解,他的远见卓识,为开发人员构建健壮、可靠和具有良好响应能力的应用程序与组件奠定了良好的基础。 《CLR via C#(第3版) 》针对.NET Framework 4.0和多核编程进行了全面更新和修订,是帮助读者深入探索和掌握公共语言运行时、C#和.NET开发的重要参考,同时也是帮助开发人员构建任何一种应用程序(如Microsoft Silverlight、ASP.NET、Windows Prensentation Foundation、Web服务和控制台应用程序)的良师益友。 本书涵括以下主题: · 构建、部署应用程序、组件和共享程序集,并对它们进行版本管理 · 理解基元类型、值类型和引用类型的行为,从而最高效地定义和使用它们 · 使用泛型和接口来定义可重用的算法 · 高效使用特定的CLR类型——委托、枚举、定制attribute、数组和字符串 · 理解垃圾回收器是如何管理内存资源的 · 使用线程池、任务、取消、计时器和异步I/O操作来设计响应性强、稳定性高和伸缩性大的解决方案 · 借助于异常处理来进行状态管理 · 使用CLR寄宿、AppDomain、程序集加载、反射和C#的dynamic类型来构造具有动态扩展能力的应用程序 本书作者作者Jeffrey Richter,.NET和Windows编程领域当之无愧的大师和权威,以著述清楚明了,行文流水,言简意赅著称,在国内具有相当高的知名度,他的著作之一《Windows核心编程(第5版)》屡获殊荣,在国内外都享有盛誉,在国内因年销量过万而获得中国书刊业发行协会“2009年度全行业畅销书品种”称号。 目录 第1章 CLR的执行模型 1.1 将源代码编译成托管模块 1.2 将托管模块合并成程序集 1.3 加载公共语言运行时 1.4 执行程序集的代码 1.4.1 IL和验证 1.4.2 不安全的代码 1.5 本地代码生成器:NGen.exe 1.6 Framework类库 1.7 通用类型系统 1.8 公共语言规范 1.9 与托管代码的互操作性 第2章 生成、打包、部署和管理应用程序及类型 2.1 .NET Framework部署目标 2.2 将类型生成到模块中 2.2.1 响应文件 2.3 元数据概述 2.4 将模块合并成程序集 2.4.1 使用Visual Studio IDE将程序集添加到项目中 2.4.2 使用程序集链接器 2.4.3 为程序集添加资源文件 2.5 程序集版本资源信息 2.5.1 版本号 2.6 语言文化 2.7 简单应用程序部署(私有部署的程序集) 2.8 简单管理控制(配置) 第3章 共享程序集和强命名程序集 3.1 两种程序集,两种部署 3.2 为程序集分配强名称 3.3 全局程序集缓存 3.4 在生成的程序集中引用一个强命名程序集 3.5 强命名程序集能防范篡改 3.6 延迟签名 3.7 私有部署强命名程序集 3.8 “运行时”如何解析类型引用 3.9 高级管理控制(配置) 3.9.1 发布者策略控制 第4章 类 型 基 础 4.1 所有类型都从System.Object派生 4.2 类型转换 4.2.1 使用C#的is和as操作符来转型 4.3 命名空间和程序集 4.4 运行时的相互联系 第5章 基元类型、引用类型和值类型 5.1 编程语言的基元类型 5.1.1 checked和unchecked基元类型操作 5.2 引用类型和值类型 5.3 值类型的装箱和拆箱 5.3.1 使用接口更改已装箱值类型中的字段(以及为什么不应该这样做) 5.3.2 对象相等性和同一性 5.4 对象哈希码 5.5 dynamic基元类型 第6章 类型和成员基础 6.1 类型的各种成员 6.2 类型的可见性 6.2.1 友元程序集 6.3 成员的可访问性 6.4 静态类 6.5 分部类、结构和接口 6.6 组件、多态和版本控制 6.6.1 CLR如何调用虚方法属性和事件 6.6.2 合理使用类型的可见性和成员的可访问性 6.6.3 对类型进行版本控制时的虚方法的处理 第7章 常量和字段 7.1 常量 7.2 字段 第8章 方法 8.1 实例构造器和类(引用类型) 8.2 实例构造器和结构(值类型) 8.3 类型构造器 8.3.1 类型构造器的性能 8.4 操作符重载方法 8.4.1 操作符和编程语言互操作性 8.5 转换操作符方法 8.6 扩展方法 8.6.1 规则和原则 8.6.2 用扩展方法扩展各种类型 8.6.3 ExtensionAttribute 8.7 分部方法 8.7.1 规则和原则 第9章 参 数 9.1 可选参数和命名参数 9.1.1 规则和原则 9.1.2 DefaultParameterValueAttribute和OptionalAttribute 9.2 隐式类型的局部变量 9.3 以传引用的方式向方法传递参数 9.4 向方法传递可变数量的参数 9.5 参数和返回类型的指导原则 9.6 常量性 第10章 属性 10.1 无参属性 10.1.1 自动实现的属性 10.1.2 合理定义属性 10.1.3 对象和集合初始化器 10.1.4 匿名类型 10.1.5 System.Tuple类型 10.2 有参属性 10.3 调用属性访问器方法时的性能 10.4 属性访问器的可访问性 10.5 泛型属性访问器方法 第11章 事件 11.1 设计要公开事件的类型 11.1.1 第一步:定义类型来容纳所有需要发送给事件通知接收者的附加信息 11.1.2 第二步:定义事件成员 11.1.3 第三步:定义负责引发事件的方法来通知事件的登记对象 11.1.4 第四步:定义方法将输入转化为期望事件 11.2 编译器如何实现事件 11.3 设计侦听事件的类型 11.4 显式实现事件 第12章 泛型 12.1 Framework类库中的泛型 12.2 Wintellect的Power Collections库 12.3 泛型基础结构 12.3.1 开放和封闭类型 12.3.2 泛型类型和继承 12.3.3 泛型类型同一性 12.3.4 代码爆炸 12.4 泛型接口 12.5 泛型委托 12.6 委托和接口的逆变和协变泛型类型实参 12.7 泛型方法 12.7.1 泛型方法和类型推断 12.8 泛型和其他成员 12.9 可验证性和约束 12.9.1 主要约束 12.9.2 次要约束 12.9.3 构造器约束 12.9.4 其他可验证性问题 第13章 接口 13.1 类和接口继承 13.2 定义接口 13.3 继承接口 13.4 关于调用接口方法的更多探讨 13.5 隐式和显式接口方法实现(幕后发生的事情) 13.6 泛型接口 13.7 泛型和接口约束 13.8 实现多个具有相同方法名和签名的接口 13.9 用显式接口方法实现来增强编译时类型安全性 13.10 谨慎使用显式接口方法实现 13.11 设计:基类还是接口? 第14章 字符、字符串和文本处理 14.1 字符 14.2 System.String类型 14.2.1 构造字符串 14.2.2 字符串是不可变的 14.2.3 比较字符串 14.2.4 字符串留用 14.2.5 字符串池 14.2.6 检查字符串中的字符和文本元素 14.2.7 其他字符串操作 14.3 高效率构造字符串 14.3.1 构造StringBuilder对象 14.3.2 StringBuilder的成员 14.4 获取对象的字符串表示:ToString 14.4.1 指定具体的格式和语言文化 14.4.2 将多个对象格式成一个字符串 14.4.3 提供定制格式化器 14.5 解析字符串来获取对象:Parse 14.6 编码:字符和字节的相互转换 14.6.1 字符和字节流的编码和解码 14.6.2 Base-64字符串编码和解码 14.7 安全字符串 第15章 枚举类型和位标志 15.1 枚举类型 15.2 位标志 15.3 向枚举类型添加方法 第16章 数组 16.1 初始化数组元素 16.2 数组转型 16.3 所有数组都隐式派生自System.Array 16.4 所有数组都隐式实现IEnumerable,Icollection和IList 16.5 数组的传递和返回 16.6 创建下限0的数组 16.7 数组的访问性能 16.8 不安全的数组访问和固定大小的数组 第17章 委托 17.1 初识委托 17.2 用委托回调静态方法 17.3 用委托回调实例方法 17.4 委托揭秘 17.5 用委托回调许多方法(委托链) 17.5.1 C#对委托链的支持 17.5.2 取得对委托链调用的更多控制 17.6 委托定义太多啦(泛型委托) 17.7 C#为委托提供的简化语法 17.7.1 简化语法1:不需要构造委托对象 17.7.2 简化语法2:不需要定义回调方法 17.7.3 简化语法3:局部变量不需要手动包装到类中即可传给回调方法 17.8 委托和反射 第18章 定制attribute 18.1 使用定制attribute 18.2 定义自己的attribute类 18.3 attribute的构造器和字段/属性的数据类型 18.4 检测定制attribute 18.5 两个attribute实例的相互匹配 18.6 检测定制attribute时不创建从Attribute派生的对象 18.7 条件attribute类 第19章 可空值类型 19.1 C#对可空值类型的支持 19.2 C#的空接合操作符 19.3 CLR对可空值类型的特殊支持 19.3.1 可空值类型的装箱 19.3.2 可空值类型的拆箱 19.3.3 通过可空值类型调用GetType 19.3.4 通过可空值类型调用接口方法 第20章 异常和状态管理 20.1 定义“异常” 20.2 异常处理机制 20.2.1 try块 20.2.2 catch块 20.2.3 finally块 20.3 System.Exception类 20.4 FCL定义的异常类 20.5 抛出异常 20.6 定义自己的异常类 20.7 用可靠性换取开发效率 20.8 指导原则和最佳实践 20.8.1 善用finally块 20.8.2 不要什么都捕捉 20.8.3 得体地从异常中恢复 20.8.4 发生不可恢复的异常时回滚部分完成的操作——维持状态 20.8.5 隐藏实现细节来维系契约 20.9 未处理的异常 20.10 对异常进行调试 20.11 异常处理的性能问题 20.12 约束执行区域(CER) 20.13 代码契约 第21章 自动内存管理(垃圾回收) 21.1 理解垃圾回收平台的基本工作原理 21.1.1 从托管堆分配资源 21.2 垃圾回收算法 21.3 垃圾回收与调试 21.4 使用终结操作来释放本地资源 21.4.1 使用CriticalFinalizerObject类型确保终结 21.4.2 SafeHandle类型及其派生类型 21.4.3 使用SafeHandle类型与托管代码进行互操作 21.5 对托管资源使用终结操作 21.6 什么会导致调用Finalize方法 21.7 终结揭秘 21.8 Dispose模式:强制对象清理资源 21.9 使用实现了Dispose模式的类型 21.10 C#的using语句 21.11 一个有趣的依赖性问题 21.12 手动监视和控制对象的生存期 21.13 对象复活 21.14 代 21.15 用于本地资源的其他垃圾回收功能 21.16 预测需求大量内存的操作能否成功 21.17 编程控制垃圾回收器 21.18 线程劫持 21.19 垃圾回收模式 21.20 大对象 21.21 监视垃圾回收 第22章 CLR寄宿和AppDomain 22.1 CLR寄宿 22.2 AppDomain 22.2.1 跨越AppDomain边界访问对象 22.3 卸载AppDomain 22.4 监视AppDomain 22.5 AppDomain FirstChance异常通知 22.6 宿主如何使用AppDomain 22.6.1 可执行应用程序 22.6.2 Microsoft Silverlight富Internet应用程序 22.6.3 Microsoft ASP.NET Web窗体和XML Web服务应用程序 22.6.4 Microsoft SQL Server 22.6.5 更多的用法只局限于你自己的想象力 22.7 高级宿主控制 22.7.1 使用托管代码管理CLR 22.7.2 编写健壮的宿主应用程序 22.7.3 宿主如何拿回它的线程 第23章 程序集加载和反射 23.1 程序集加载 23.2 使用反射构建动态可扩展应用程序 23.3 反射的性能 23.3.1 发现程序集中定义的类型 23.3.2 类型对象的准确含义 23.3.3 构建Exception派生类型的一个层次结构 23.3.4 构造类型的实例 23.4 设计支持加载项的应用程序 23.5 使用反射发现类型的成员 23.5.1 发现类型成员 23.5.2 BindingFlags:筛选返回的成员种类 23.5.3 发现类型的接口 23.5.4 调用类型的成员 23.5.5 一次绑定、多次调用 23.5.6 使用绑定句柄来减少进程的内存耗用 第24章 运行时序列化 24.1 序列化/反序列化快速入门 24.2 使类型可序列化 24.3 控制序列化和反序列化 24.4 格式化器如何序列化类型实例 24.5 控制序列化/反序列化的数据 24.5.1 如何在基类没有实现ISerializable的前提下定义一个实现它的类型 24.6 流上下文 24.7 将类型序列化为不同的类型以及将对象反序列化为不同的对象 24.8 序列化代理 24.8.1 代理选择器链 24.9 反序列化对象时重写程序集和/或类型 第25章 线程基础 25.1 Windows为什么要支持线程 25.2 线程开销 25.3 停止疯狂 25.4 CPU发展趋势 25.5 NUMA架构的机器 25.6 CLR线程和Windows线程 25.7 使用专用线程执行异步的计算限制操作 25.8 使用线程的理由 25.9 线程调度和优先级 25.10 前台线程和后台线程 25.11 继续学习 第26章 计算限制的异步操作 26.1 CLR线程池基础 26.2 执行简单的计算限制操作 26.3 执行上下文 26.4 协作式取消 26.5 任务 26.5.1 等待任务完成并获取它的结果 26.5.2 取消任务 26.5.3 一个任务完成时自动启动一个新任务 26.5.4 任务可以启动子任务 26.5.5 任务内部揭秘 26.5.6 任务工厂 26.5.7 任务调度器 26.6 Parallel的静态For,ForEach和Invoke方法 26.7 并行语言集成查询(PLINQ) 26.8 执行定时计算限制操作 26.8.1 太多的计时器,太少的时间 26.9 线程池如何管理线程 26.9.1 设置线程池限制 26.9.2 如何管理工作者线程 26.10 缓存线和伪共享 第27章 I/O限制的异步操作 27.1 Windows如何执行I/O操作 27.2 CLR的异步编程模型(APM) 27.3 AsyncEnumerator类 27.4 APM和异常 27.5 应用程序及其线程处理模型 27.6 异步实现服务器 27.7 APM和计算限制操作 27.8 APM的注意事项 27.8.1 在没有线程池的前提下使用APM 27.8.2 总是调用EndXxx方法,而且只调用一次 27.8.3 调用EndXxx方法时总是使用相同的对象 27.8.4 为BeginXxx和EndXxx方法使用ref,out和params实参 27.8.5 不能取消异步I/O限制操作 27.8.6 内存消耗 27.8.7 有的I/O操作必须同步完成 27.8.8 FileStream特有的问题 27.9 I/O请求优先级 27.10 将IAsyncResult APM转换为Task 27.11 基于事件的异步模式 27.11.1 将EAP转换为Task 27.11.2 APM和EAP的对比 27.12 编程模型的泥沼 第28章 基元线程同步构造 28.1 类库和线程安全 28.2 基元用户模式和内核模式构造 28.3 用户模式构造 28.3.1 易失构造 28.3.2 互锁构造 28.3.3 实现简单的Spin Lock 28.3.4 Interlocked Anything模式 28.4 内核模式构造 28.4.1 Event构造 28.4.2 Semaphore构造 28.4.3 Mutex构造 28.4.4 在一个内核构造可用时调用一个方法 第29章 混合线程同步构造 29.1 一个简单的混合锁 29.2 自旋、线程所有权和递归 29.3 混合构造的大杂烩 29.3.1 ManualResetEventSlim和SemaphoreSlim类 29.3.2 Monitor类和同步块 29.3.3 ReaderWriterLockSlim类 29.3.4 OneManyLock类 29.3.5 CountdownEvent类 29.3.6 Barrier类 29.3.7 线程同步构造小结 29.4 著名的双检锁技术 29.5 条件变量模式 29.6 用集合防止占有锁太长的时间 29.7 并发集合类

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值